// Buffer(缓冲区)
// - Buffer的结构 和 数组 很像，操作方法也和数组类似，实际上你就可以把他看成一个数组
// - 数组中不能存储二进制文件，而 buffer 就是专门用来存储二进制数据的，弥补了数组的不足，因此可以理解 buffer 为专门用来存储二进制
// 文件的数组
// - 使用 buffer 不需要引入模块，直接使用即可
// - 在 buffer 中存储的是二进制数据，但是在显示时，都是以16进制的形式显示的,就是 unicode 编码
// - buffer 中的每一个元素的范围是从 00 ~ ff  0 ~ 255
// - 计算机 一个0 或 一个1  我们成为1位，即 1 bit
// 8 bit（位） = 1 byte（字节），字节 是数据传输的最小单位
// 注意：1 个汉字 是 3 个字节

var str = "hello world";
var Str = "HELLO WORLD";

// 将一个字符串保存到 buffer 中
var buf = Buffer.from(str);
var Buf = Buffer.from(Str);
// console.log(buf);
// console.log(Buf);
// console.log(buf.length); // 占用内存的大小
// console.log(str.length); // 字符串的长度

// 创建一个 buffer 
// 注意：不建议使用构造函数的方法来创建，就是不建议使用 new Buffer() 的方法来创建 buffer
// 使用 Buffer.alloc() 来创建指定大小的数组

// - Buffer 的大小一旦被创建，就确定了，永远不能修改
// - buffer 实际上是对底层内存的直接操作
// - buffer 里面的内存空间是连续的

// - buffer 里面的元素范围是 00 ~ ff ，因此一旦超出了这个范围，回取 低八位
var buf2 = Buffer.alloc(10);
console.log(buf2);
buf2[0] = 10;
buf2[1] = 32;
buf2[2] = 0x65;
console.log(buf2);

// - 只要数字在 控制台 或者 页面 中输出，一定是10进制，只要是输出，就是10进制，默认输出是10进制
// - 如果想把输出转换成 别的进制，那么要先把 数据 转换成 字符串，然后再转换成 相应的进制 ，即 使用.toString(16|8|2)
// console.log(buf2[2]);
// console.log(buf2[2].toString(16));
// console.log(buf2[2].toString(8));
// console.log(buf2[2].toString(2));

// - 使用 Buffer.allocUnsafe() 也可以创建指定大小的 buffer，但是里面会包含一些敏感数据，因此叫做 allocUnsafe
// - Buffer.from(string) 就是把 字符串 转换成 buffer
var buf1 = Buffer.allocUnsafe(10);
console.log(buf1);

// alloc 和 allocUnsafe 的区别就是，alloc 在获取内存空间的时候，把数据清空了，但是 allocUnsafe 则没有清空

// - 调用 toString 可以把 buffer数据（缓冲区数据） 转换成 字符串

var buf = Buffer.from("我一段数据");
console.log(buf);
console.log(buf.toString());